const mongoose = require('mongoose');
//连接的数据库不需要先创建
mongoose.connect('mongodb://localhost/bookshop', {
    useUnifiedTopology: true,
    useNewUrlParser: true
});

//创建集合(表)规则，不是集合
const schema = new mongoose.Schema({
    name: String,
    price: Number,
    count: Number,
    createDate: {
        type: Date,
        default: Date.now,
    }
});

//创建集合(表)
const model = new mongoose.model("books", schema);

const {pagerHelper} = require("../../util/PagerHelper");

/**
 * 同步函数，分页查询书本
 * @param where 查询条件对象
 * @param columns   查询的字段名称
 */
// Promise
async function findByPage(where, columns) {
    let result = await model.find(where).select(columns)
        .limit(pagerHelper.pageSize).skip((pagerHelper.pageNum - 1) * pagerHelper.pageSize);
    return result;
}

/**
 * 根据id搜索
 * @param _id
 * @returns {Promise<*>}
 */
async function findById(_id) {
    return await model.findById(_id);
}

async function getCount(where) {
    let result = await model.count(where);
    return result;
}

/**
 * 根据id删除数据
 * @param _id
 * @returns {Promise<*>}
 */
async function deleteById(_id) {
    return await model.findByIdAndDelete(_id);
}

/**
 * 插入数据到数据库中
 * @param obj
 * @returns {Promise<EnforceDocument<unknown, {}>[]>}
 */
async function insert(obj) {
    return await model.create(obj);
}

/**
 * 编辑书本
 * @param obj
 * @param _id
 * @returns {Promise<*>}
 */
async function update(obj, _id) {
    return await model.findByIdAndUpdate(_id, obj);
}

/**
 * 删除多个ids的数据
 * @param ids
 * @returns {Promise<*>}
 */
async function deleteByIds(ids) {
    if (Array.isArray(ids)) {
        return await model.deleteMany({_id: {$in: ids}});
    }
}

/**
 * 无条件获取所有数据
 * @returns {Promise<*>}
 */
async function findAll() {
    return await model.find();
}

module.exports = {
    findByPage, findById, getCount, deleteById, deleteByIds, insert, update, findAll
}